package timbap.visualizer.api.model;

/**
 * The <code>TimeCode</code> interface outlines the properties
 * of a typical vinyl control time code and provides methods
 * to access them without knowledge of the specific implementation
 * used.
 *
 * @author  Andreas Pabst
 */
public interface TimeCode {
    
    public float getMaximumAbsolutePosition();
    
    public boolean hasJumped();
    
    public boolean isReverse();

    public boolean isAbsolutePositionValid();

    public float getAbsolutePosition();

    public void setAbsolutePosition(float pAbsolutePosition);

    public float getAbsolutePositionDelta();

    public float getNormalizedAbsolutePosition();

    public float getNormalizedAbsolutePositionDelta();

    public float getVelocity();

    public void setVelocity(float pVelocity);

    public float getSignalPower();

    public void setSignalPower(float pSignalPower);

    public float getFractionPlayed();

    public void setFractionPlayed(float pFractionPlayed);

    public boolean isOnFlipSide();

    public void setOnFlipSide(boolean pOnFlipSide);
    
}
